package com.ngmaster.socket.message;

import com.ngmaster.socket.ProtocolMessage;

import java.util.Arrays;

/**
 * 心跳协议<br/>
 * 用于维持链路，和实时更新电脑板工作状态，默认3分钟一次心跳。电脑板主动上传无需应答<br/>
 *
 * 设备ICCID	命令字	数据长度	数据	CRC16<br/>
 * HEX（10字节）	HEX（1字节）	HEX（2字节）	HEX(根据长度)	HEX（2字节）<br/>
 * 	0x01	0x0010	见下表<br/>
 *
 * 设备状态：1byte
 *      0：备用
 *      1：待激活
 *      2：出厂测试状态
 *      3：正常制水
 *      4：欠费
 *      5：故障
 *      6：关机
 *      7：水满
 *      8：缺水
 *      9：漏水
 *      10：滤芯待复位
 *      11：硬件测试
 *
 * 屏幕状态：1byte
 *      0：屏幕打开（上电默认值）
 *      1：屏幕关闭
 * 工作模式：1byte
 *      0：流量模式
 *      1：时长模式
 *
 * 剩余流量：2byte
 * 剩余天数：2byte 天数完全按照服务器计算值
 * 已用流量：2byte
 * 已用天数：2byte
 * 净水TDS：2byte
 * 原水TDS：2byte
 * 第一级滤芯剩余值：2byte
 * 第二级滤芯剩余值：2byte
 * 第三级滤芯剩余值：2byte
 * 第四级滤芯剩余值：2byte
 * 第五级滤芯剩余值：2byte
 * 第一级滤芯最大值：2byte
 * 第二级滤芯最大值：2byte
 * 第三级滤芯最大值：2byte
 * 第四级滤芯最大值：2byte
 * 第五级滤芯最大值：2byte
 * 信号强度值：1byte
 * LAC值：2byte
 * CID值：2byte
 *
 * */
public class HeartbeatMessage extends ProtocolMessage {

    private byte sbzt; // 设备状态
    private byte pmzt; // 屏幕状态
    private byte gzms; // 工作模式
    private short syll; // 剩余流量
    private short syts; // 剩余天数
    private short yyll; // 已用流量
    private short yyts; // 已用天数
    private short jstds; // 净水TDS
    private short ystds; // 原水TDS
    private short dyijlxsyz; // 第一级滤芯剩余值
    private short derjlxsyz; // 第二级滤芯剩余值
    private short dsanjlxsyz; // 第三级滤芯剩余值
    private short dsijlxsyz; // 第四级滤芯剩余值
    private short dwujlxsyz; // 第无级滤芯最大值
    private short dyijlxzdz; // 第一级滤芯最大值
    private short derjlxzdz; // 第二级滤芯最大值
    private short dsanjlxzdz; // 第三级滤芯最大值
    private short dsijlxzdz; // 第四级滤芯最大值
    private short dwujlxzdz; // 第无级滤芯最大值
    private byte xhqdz; // 信号强度值
    private short lac; // LAC
    private short cid; // CID

    @Override
    public void onSerial() {

    }

    @Override
    public void onDeserialize() {
        this.sbzt = this.byteArray.readByte();
        this.pmzt = this.byteArray.readByte();
        this.gzms = this.byteArray.readByte();
        this.syll = this.byteArray.readShort();
        this.syts = this.byteArray.readShort();
        this.yyll = this.byteArray.readShort();
        this.yyts = this.byteArray.readShort();
        this.jstds = this.byteArray.readShort();
        this.ystds = this.byteArray.readShort();
        this.dyijlxsyz = this.byteArray.readShort();
        this.derjlxsyz = this.byteArray.readShort();
        this.dsanjlxsyz = this.byteArray.readShort();
        this.dsijlxsyz = this.byteArray.readShort();
        this.dwujlxsyz = this.byteArray.readShort();
        this.dyijlxzdz = this.byteArray.readShort();
        this.derjlxzdz = this.byteArray.readShort();
        this.dsanjlxzdz = this.byteArray.readShort();
        this.dsijlxzdz = this.byteArray.readShort();
        this.dwujlxzdz = this.byteArray.readShort();
        this.xhqdz = this.byteArray.readByte();
        this.lac = this.byteArray.readShort();
        this.cid = this.byteArray.readShort();
    }

    public byte getSbzt() {
        return sbzt;
    }

    public void setSbzt(byte sbzt) {
        this.sbzt = sbzt;
    }

    public byte getPmzt() {
        return pmzt;
    }

    public void setPmzt(byte pmzt) {
        this.pmzt = pmzt;
    }

    public byte getGzms() {
        return gzms;
    }

    public void setGzms(byte gzms) {
        this.gzms = gzms;
    }

    public short getSyll() {
        return syll;
    }

    public void setSyll(short syll) {
        this.syll = syll;
    }

    public short getSyts() {
        return syts;
    }

    public void setSyts(short syts) {
        this.syts = syts;
    }

    public short getYyll() {
        return yyll;
    }

    public void setYyll(short yyll) {
        this.yyll = yyll;
    }

    public short getYyts() {
        return yyts;
    }

    public void setYyts(short yyts) {
        this.yyts = yyts;
    }

    public short getJstds() {
        return jstds;
    }

    public void setJstds(short jstds) {
        this.jstds = jstds;
    }

    public short getYstds() {
        return ystds;
    }

    public void setYstds(short ystds) {
        this.ystds = ystds;
    }

    public short getDyijlxsyz() {
        return dyijlxsyz;
    }

    public void setDyijlxsyz(short dyijlxsyz) {
        this.dyijlxsyz = dyijlxsyz;
    }

    public short getDerjlxsyz() {
        return derjlxsyz;
    }

    public void setDerjlxsyz(short derjlxsyz) {
        this.derjlxsyz = derjlxsyz;
    }

    public short getDsanjlxsyz() {
        return dsanjlxsyz;
    }

    public void setDsanjlxsyz(short dsanjlxsyz) {
        this.dsanjlxsyz = dsanjlxsyz;
    }

    public short getDsijlxsyz() {
        return dsijlxsyz;
    }

    public void setDsijlxsyz(short dsijlxsyz) {
        this.dsijlxsyz = dsijlxsyz;
    }

    public short getDwujlxsyz() {
        return dwujlxsyz;
    }

    public void setDwujlxsyz(short dwujlxsyz) {
        this.dwujlxsyz = dwujlxsyz;
    }

    public short getDyijlxzdz() {
        return dyijlxzdz;
    }

    public void setDyijlxzdz(short dyijlxzdz) {
        this.dyijlxzdz = dyijlxzdz;
    }

    public short getDerjlxzdz() {
        return derjlxzdz;
    }

    public void setDerjlxzdz(short derjlxzdz) {
        this.derjlxzdz = derjlxzdz;
    }

    public short getDsanjlxzdz() {
        return dsanjlxzdz;
    }

    public void setDsanjlxzdz(short dsanjlxzdz) {
        this.dsanjlxzdz = dsanjlxzdz;
    }

    public short getDsijlxzdz() {
        return dsijlxzdz;
    }

    public void setDsijlxzdz(short dsijlxzdz) {
        this.dsijlxzdz = dsijlxzdz;
    }

    public short getDwujlxzdz() {
        return dwujlxzdz;
    }

    public void setDwujlxzdz(short dwujlxzdz) {
        this.dwujlxzdz = dwujlxzdz;
    }

    public byte getXhqdz() {
        return xhqdz;
    }

    public void setXhqdz(byte xhqdz) {
        this.xhqdz = xhqdz;
    }

    public short getLac() {
        return lac;
    }

    public void setLac(short lac) {
        this.lac = lac;
    }

    public short getCid() {
        return cid;
    }

    public void setCid(short cid) {
        this.cid = cid;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("HeartbeatMessage{");
        sb.append("sbzt=").append(sbzt);
        sb.append(", pmzt=").append(pmzt);
        sb.append(", gzms=").append(gzms);
        sb.append(", syll=").append(syll);
        sb.append(", syts=").append(syts);
        sb.append(", yyll=").append(yyll);
        sb.append(", yyts=").append(yyts);
        sb.append(", jstds=").append(jstds);
        sb.append(", ystds=").append(ystds);
        sb.append(", dyijlxsyz=").append(dyijlxsyz);
        sb.append(", derjlxsyz=").append(derjlxsyz);
        sb.append(", dsanjlxsyz=").append(dsanjlxsyz);
        sb.append(", dsijlxsyz=").append(dsijlxsyz);
        sb.append(", dwujlxsyz=").append(dwujlxsyz);
        sb.append(", dyijlxzdz=").append(dyijlxzdz);
        sb.append(", derjlxzdz=").append(derjlxzdz);
        sb.append(", dsanjlxzdz=").append(dsanjlxzdz);
        sb.append(", dsijlxzdz=").append(dsijlxzdz);
        sb.append(", dwujlxzdz=").append(dwujlxzdz);
        sb.append(", xhqdz=").append(xhqdz);
        sb.append(", lac=").append(lac);
        sb.append(", cid=").append(cid);
        sb.append(", imeiBytes=").append(Arrays.toString(imeiBytes));
        sb.append(", imei='").append(imei).append('\'');
        sb.append(", cmd=").append(cmd);
        sb.append(", dataLength=").append(dataLength);
        sb.append(", crc=").append(crc);
        sb.append(", crcHex='").append(crcHex).append('\'');
        sb.append(", byteArray=").append(byteArray);
        sb.append('}');
        return sb.toString();
    }
}
